#include <cassert>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <math.h>
#include "malla/malla.h"



Malla calcularRes(double res, double error) {
	int len = ceil((res-0.375)/0.5);
	Celda e(SUDESTE, 0, len-1,0);
	Celda s(0, NOROESTE, 0, 0);
	Malla m(len,e,s);
	double resu = m.getResistencia();
	int j = 1;
	int i;
	while((j < len) && (fabs(resu-res) > error)) {
		while((j < len) && (resu > res)){
			i = 0;
			while((resu - res > error) && (i < len)) {
				m.setCelda(i,j);
				resu = m.getResistencia();
				i++;
			}
			j++;
		}
		if(fabs(resu-res) > error ) {
			j--;i--;
			m.resetCelda(i,j);
			resu = m.getResistencia();
			j++;i++;
		}
	}
	return m;
}

int main(int argc, char* argv[]){
	ofstream data("size.dat", ios::app);
	double res,error;
	
	//Manejo argumentos!
	res = atof(argv[1]);
	error = atof(argv[2]);
	

	cout << "La resistencia pedida es " << res << endl;
	cout << "El error pedido es " << error << endl;
/*	cin >> res;
	cout << "Ingrese el error que lo contenta" << endl;
	cin >> error;
	cout << "Calculando" << endl;
	Malla m = calcularRes(res, error);
	cout << "La resistencia hallada es: "<< m.getResistencia() << endl;
*/
	
//	cout <<"calculo la resistencia equivalente de :" <<res;
//	cout <<" con error de: " <<error <<endl;
	Malla m = calcularRes(res, error);
	cout << "resistencia obtenida es: " << m.getResistencia() << endl;
	data <<  m.size() << endl; 
	string desea;
	double nombre;
	cout << "desea ponerle nombre a la matriz? (y/n)" << endl;
	cin >> desea;
	if(desea == "y"){
		cout << "inserte un numero:" << endl;
		cin >> nombre ;
		m.show(nombre);
	} else {
		m.show();
	}
	return 0;
}
